package ar.edu.uade.centroDistribucion.sessionBeans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import ar.edu.uade.centroDistribucion.entities.Articulo;
import ar.edu.uade.centroDistribucion.sessionBeans.administradorReposicionFabrica;
import ar.edu.uade.centroDistribucion.valueObjects.ArticuloVO;
import ar.edu.uade.centroDistribucion.valueObjects.RepAFVO;
import ar.edu.uade.centroDistribucion.valueObjects.VistaRepAFVO;

public @Stateless class administradorReposicionFabricaBean implements administradorReposicionFabrica {

	@EJB
	private administradorArticulo adminArticulo;
	@EJB
	private administradorSolicitudFabricacion adminSolicitudFabricacion;
	@EJB
	private administradorEnvioATienda adminEnvioTienda;
	
	@PersistenceContext(unitName="CentroDistribucionTortuguitas")
	private EntityManager manager;
	
	public List<VistaRepAFVO> ReponerArticulos (RepAFVO repAF){
		List<ArticuloVO> articulos = repAF.getArticulos();
		List<VistaRepAFVO> listaVistas = null;
		VistaRepAFVO vistaVO = null;
		Articulo art = null;
		try
		{
			//Actualizo Stock del articulo
			for (ArticuloVO articulo : articulos){
				
				adminArticulo.ActualizarStockPorReferencia(articulo.getReferencia(), articulo.getCantidad());
				adminSolicitudFabricacion.actualizarPendientesPorArticulo(articulo.getReferencia(),articulo.getCantidad());
			}
			//una vez que tengo todo procesado llamo a envio a tienda para que regenere los envios o actualice los estados
			adminEnvioTienda.revisarPendientes();			
			//Si todo va bien ahora creo la vista para el cliente
			listaVistas = new ArrayList<VistaRepAFVO>();
			for (ArticuloVO articulo : articulos){
				vistaVO = new VistaRepAFVO();
				art = adminArticulo.ObtenerPorReferencia(articulo.getReferencia());
				vistaVO.setArticulo(articulo.getReferencia());
				vistaVO.setDescripcion(art.getDescripcion());
				vistaVO.setCantRecibida(articulo.getCantidad());
				listaVistas.add(vistaVO);
			}
		}
		catch (Exception e) {
			System.out.println("Error en RepAf: \n");
			System.out.println(e.getMessage());
			System.out.println(e.getClass());
			System.out.println(e.toString());
			return null;
		}			
		return listaVistas; //vistaVO;
	}
}
